[Node][小ネタ] S3のURLからバケット名、キーなどを取り出す
Nodeで形式が決まったS3のURLのパースは標準ライブラリのurl.URLを使うことで簡単に行えます
はじめに
S3上のオブジェクトのURL(例: s3://bucket/some_object.key
) からバケット名とキーを取り出したいことが稀によくあります。JavaであればAWS SDKにAmazonS3URI という便利クラスがあるのですが、Node SDKにはこれに相当するAPIは存在しないようです。Nodeでもどうにか簡単にできないかと試してみました。
標準ライブラリのurlを使う
出オチ感ありますが、以下のようにurl.URL
を使うことでパースできます。
host
をバケット名、pathname
から先頭のスラッシュを削除したものをキーと読み替えればひとまず目的は達します。
const url = require('url') new url.URL('s3://bucket/some_obj.key') /* URL { href: 's3://bucket/some_obj.key', origin: 'null', protocol: 's3:', username: '', password: '', host: 'bucket', hostname: 'bucket', port: '', pathname: '/some_obj.key', search: '', searchParams: URLSearchParams {}, hash: '' } */
HTTPSの場合
プロトコルがHTTPSのURL(https://<bucket-name>.amazonaws.com
)の場合は素直にparse-s3-urlを使うか、host
を解析するのがいいと思います。